<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>静态成员</title>
</head>

<body>
    <p>在 JavaScript 中底层函数本质上也是对象类型，
        因此允许直接为函数动态添加属性或方法，构造函数的属性和方法被称为静态成员。</p>

    <p>
        总结： <br>

        1. 静态成员指的是添加到构造函数本身的属性和方法 <br>
        2. 一般公共特征的属性或方法设置为静态成员 <br>
        3. 静态成员方法中的 this 指向构造函数本身
    </p>
   <script>  
  // 构造函数  
  function Person(name, age) {  
    // 这里可以添加实例成员，但在这个示例中我们省略了它们  
    // 例如：this.name = name;  
    //       this.age = age;  
  }  
  
  // 静态属性  
  Person.eyes = 2;  
  Person.arms = 2;  
  
  // 静态方法  
  Person.walk = function() {  
    console.log('^_^人都会走路...');  
    // this 指向 Person 构造函数  
    console.log(this.eyes); // 输出: 2  
  };  
  
  // 调用静态方法  
  Person.walk(); // 输出:  
  // ^_^人都会走路...  
  // 2  
  
  // 注意：我们不能通过 Person 的实例来调用静态方法或访问静态属性  
  // 例如，以下代码会抛出错误（如果尝试访问不存在的实例属性）或不会按预期工作（如果尝试访问静态属性但方式不正确）：  
  // var personInstance = new Person('John', 30);  
  // console.log(personInstance.walk()); // 错误：personInstance.walk 不是函数  
  // console.log(personInstance.eyes); // undefined，因为 eyes 是静态属性，不是实例属性  
  // 但可以这样访问静态属性：  
  // console.log(Person.eyes); // 正确：输出 2  
</script>
</body>

</html>